爱客仕-前端团队博客园

Nodejs查漏补缺-Operating system and command-line integration

在这里记录下nodejs各种小细节

ch3 Operating system and command-line integration

1. 吐槽

其实我们的nodejs并不是那么的跨平台
包括windows下的fs.filewatch触发两次,node-sass在windows下安装超级困难
某些包因为有node-gyp编译过程,导致在一个平台安装后在其他平台不能用
node-gyp是一个将c++代码编译成可供nodejs调用的二进制文件的node包
在linux下会使用gcc编译,windows下则是visual c++

2. 一些与runtime env有关的flag

  • process.arch: 三个值:’arm’, ‘ia32’, or ‘x64’,代表32位/64位/arm系统结构
  • process.memoryUsage(): 内存使用
  • process.argv: 程序运行时传入的命令行参数
  • process.cwd(): 程序运行时的目录
  • process.env: 程序运行时的环境变量
  • process.nextTick(callback[, arg][, …]): 将callback回调丢进Node下一个tick执行
  • process.pid: 程序运行时的进程id
    更多属性查看

3. 结束程序

一般来说我们的程序是用户终止or执行完毕之后自动结束
那我们想精确控制程序结束时机该怎么办呢
答案在 process.exit(arg) 这个函数上
其中arg - 0 : 正常退出,arg - 1 : 带有错误退出
arg由程序编写者指定
more code meanings

4. 进程间通信

如果对进程及进程间通信感到陌生,建议先google补充基础知识

先看一个例子:

1
2
3
4
5
process.stdin.resume(); // 让程序监听 stdin标准输入,使其不会自动停止运行,直到用户按下 ctrl+c
process.on('SIGHUP', () => { //监听 SIGHUP事件
console.log('Reloading configuration...');
});
console.log('PID:', process.pid);

nodejs对进程间的通信也描述成事件的形式
process本身也是一个EventEmitter对象
假设该程序的运行时的进程是:9999
在 unix like系统下,命令行运行kill -HUP 9999就可以向node进程发送SIGHUP事件
当然我们也可以写在代码里:

1
process.kill(9999, 'SIGHUP')

不过windows下SIGHUP不能用代码而只能用cmd发送,也算是与我之前吐槽向呼应了把

tips: kill [sign] [pid] 并不是指这个进程将会被killed,而仅仅是发送signal给进程